package br.com.sigarota.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.com.sigarota.modelo.Ponto;


public class PontoDAO extends DAO<Ponto> {

	private Logger logger = Logger.getLogger(PontoDAO.class);

	public PontoDAO(Session session, Class<?> classe) {
		super(session, classe);
	}
	
	public Ponto pesquisaPontoById(Long id) {
		logger.info("pesquisaPonto2ById : " + id);
		return (Ponto) session.load(Ponto.class, id);
	}
	
	public Ponto pesquisaPontoByNome(String nome) {
		logger.info("pesquisaPonto2ByNome : " + nome);
		Criteria c = session.createCriteria(Ponto.class);
		c.add(Restrictions.ilike("nome", "%" + nome + "%"));

		return (Ponto)c.uniqueResult();
	}
	
	@SuppressWarnings("unchecked")
	public List<Ponto> pesquisaPontos(String nome){
		Criteria c = session.createCriteria(Ponto.class);
		c.add(Restrictions.ilike("nome", "%" + nome + "%"));
		c.addOrder(Order.asc("nome"));
		
		return c.list();
	}
	
	/**
	 * Exemplo utilizando HQL 
	 * @param id
	 * @return
	 */
	public Ponto buscaPonto(Long id){
		Query q = session.createQuery("select p from " + Ponto.class.getName() + " as p where p.id like :id");
		
		q.setParameter("id", id);
		
		return (Ponto)q.uniqueResult();
	}
}